package gob.cgr.web.sgrh.managed;

import gob.cgr.sgrh.ejb.entidad.ActaEntrega;
import gob.cgr.sgrh.ejb.entidad.Maestra;
import gob.cgr.sgrh.ejb.entidad.MovimientoDePersonal;
import gob.cgr.sgrh.ejb.entidad.Persona;
import gob.cgr.sgrh.ejb.entidad.Personal;
import gob.cgr.sgrh.ejb.entidad.Usuario;
import gob.cgr.web.sgrh.service.SigerhService;
import gob.cgr.web.sgrh.util.Utilitario;

import java.util.Calendar;
import java.util.Date;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.inject.Inject;

import org.primefaces.event.TabChangeEvent;


@ViewScoped
@ManagedBean
public class ActaEntregaMB {

	private List<ActaEntrega> actaEntregaList;
	private ActaEntrega actaEntrega;
	private ActaEntrega actaEntregaSelected;
	private List<Maestra> motivoActaList;
	private Date desde;
	private Date hasta;
	private String estado;
	private String gerencia;
	private String puesto;
	private String fechaIngreso;
	private String tabSelected;
	private boolean fechaRetornoRequerido=false;
	
	
	
	@Inject
	private SigerhService service;
	@ManagedProperty(value="#{usuarioMB}")
	UsuarioMB usuarioMB;
	
	public ActaEntregaMB() {
		// TODO Auto-generated constructor stub
	}
	
	@PostConstruct
	public void inicio(){
		nuevaActaEntrega();
		Calendar c=Calendar.getInstance();
		hasta=c.getTime();
		c.roll(Calendar.MONTH, -1);
		desde=c.getTime();
		listarActasEntregas();
		setMotivoActaList(service.listarMotivosActaEntrega());
	}
	
	public void nuevaActaEntrega(){
		actaEntrega=new ActaEntrega();
		actaEntrega.setIdPersonal(new Personal());
		actaEntrega.getIdPersonal().setIdPersona(new Persona());
		actaEntregaSelected=null;
		gerencia="";
		puesto="";
		fechaIngreso="";
	}
	 public void onTabChange(TabChangeEvent event) {  
	       tabSelected=event.getTab().getId();  
	    }  
	
	public void listarActasEntregas(){
		actaEntregaList=service.listarActasEntregas(null, desde, hasta, estado);
	}

	public List<ActaEntrega> getActaEntregaList() {
		return actaEntregaList;
	}

	public void setActaEntregaList(List<ActaEntrega> actaEntregaList) {
		this.actaEntregaList = actaEntregaList;
	}

	public ActaEntrega getActaEntrega() {
		return actaEntrega;
	}

	public void setActaEntrega(ActaEntrega actaEntrega) {
		this.actaEntrega = actaEntrega;
	}

	public Date getDesde() {
		return desde;
	}

	public void setDesde(Date desde) {
		this.desde = desde;
	}

	public Date getHasta() {
		return hasta;
	}

	public void setHasta(Date hasta) {
		this.hasta = hasta;
	}

	public String getEstado() {
		return estado;
	}

	public void setEstado(String estado) {
		this.estado = estado;
	}
	
	public void registrar(){
		try {
			service.registrarActaEntrega(actaEntrega);
			nuevaActaEntrega();
		Utilitario.mostrarMensajeExito("Se ha realizado la operacion correctamente");
		} catch (Exception e) {
			// TODO: handle exception
		Utilitario.mostrarMensajeAlerta("Ha ocurrido un error al intentar registrar "+e.getMessage());
		}
	}
	
	public void eliminarActa(){
		try {
			service.eliminarActaEntrega(actaEntregaSelected);
			nuevaActaEntrega();
		Utilitario.mostrarMensajeExito("Se ha realizado la operacion correctamente");
		} catch (Exception e) {
			// TODO: handle exception
		Utilitario.mostrarMensajeExito("Ha ocurrido un error al intentar eliminar "+e.getMessage());
		}
		
	}
	
	public void actualizarActa(){
		try {
		Usuario user=getUsuarioMB().getUser();	
		Date d=new Date();
		System.out.println("tab selected "+tabSelected +" "+getTabSelected());
		if(getTabSelected().equals("1")){
			actaEntregaSelected.setUserVbTi(user.getNombreUsuario());
			actaEntregaSelected.setFechaVbTi(d);
			
		}else 
			if(getTabSelected().equals("2")){
			actaEntregaSelected.setUserVbSecretaria(user.getNombreUsuario());
			actaEntregaSelected.setFechaVbSecretaria(d);
		}else
			if(getTabSelected().equals("3")){
				
			actaEntregaSelected.setUserVbLogistica(user.getNombreUsuario());
			actaEntregaSelected.setFechaVbLogistica(d);	
		}
			
		service.actualizarActaEntrega(actaEntregaSelected);
		
		Utilitario.mostrarMensajeExito("Se ha realizado la operacion correctamente");
		} catch (Exception e) {
			// TODO: handle exception
		Utilitario.mostrarMensajeExito("Ha ocurrido un error al intentar actualizar "+e.getMessage());
		}
		
	}
	
	
	public void cargarDatosPersonal(){
		String dni=actaEntrega.getIdPersonal().getIdPersona().getNroDocumento();
	if(!Utilitario.isNullOrEmpty(dni)){
	Personal p=service.buscarPersonalPorDNI(dni);
	if(p!=null){
	actaEntrega.setIdPersonal(p);
	cargarDatosAdicionales(p);
	}
		}
	}
	
	private void cargarDatosAdicionales(Personal p){
		if(p!=null)
	for(MovimientoDePersonal m:	service.listarMovimientosPersonal(p.getIdPersonal())){
		gerencia=m.getIdUnidadOrganica().getNombreUnidad();
		puesto=m.getIdPuesto().getNombre();
		setFechaIngreso(String.format("%1$td-%1$tb-%1$tY",m.getIngreso()));
		break;
		}
	}
	
	public void selectActaEntrega(){
		if(actaEntregaSelected!=null)
		cargarDatosAdicionales(actaEntregaSelected.getIdPersonal());
	}
	
	
	
	
	
	
	public ActaEntrega getActaEntregaSelected() {
		return actaEntregaSelected;
	}

	public void setActaEntregaSelected(ActaEntrega actaEntregaSelected) {
		this.actaEntregaSelected = actaEntregaSelected;
	}

	public List<Maestra> getMotivoActaList() {
		return motivoActaList;
	}

	public void setMotivoActaList(List<Maestra> motivoActaList) {
		this.motivoActaList = motivoActaList;
	}

	public String getGerencia() {
		return gerencia;
	}

	public void setGerencia(String gerencia) {
		this.gerencia = gerencia;
	}

	public String getPuesto() {
		return puesto;
	}

	public void setPuesto(String puesto) {
		this.puesto = puesto;
	}

	public String getFechaIngreso() {
		return fechaIngreso;
	}

	public void setFechaIngreso(String fechaIngreso) {
		this.fechaIngreso = fechaIngreso;
	}

	public UsuarioMB getUsuarioMB() {
		return usuarioMB;
	}

	public void setUsuarioMB(UsuarioMB usuarioMB) {
		this.usuarioMB = usuarioMB;
	}

	public String getTabSelected() {
		return tabSelected;
	}

	public void setTabSelected(String tabSelected) {
		this.tabSelected = tabSelected;
	}

	public boolean isFechaRetornoRequerido() {
		System.out.println("actaEntrega.getIdMotivo() : "+actaEntrega.getIdMotivo());
		fechaRetornoRequerido=actaEntrega.getIdMotivo()==6||actaEntrega.getIdMotivo()==8?true:false;
		return fechaRetornoRequerido;
	}

	public void setFechaRetornoRequerido(boolean fechaRetornoRequerido) {
		this.fechaRetornoRequerido = fechaRetornoRequerido;
	}
	
}
